Technical Q&A QA1270
The Data Browser GetDataBrowserUserState API


Q: GetDataBrowserUserState ÇégǡǃÅADataBrowser ÉRÉìÉgÉçÅ[ÉãÇÃÉÜÅ[ÉUÇÃèÛë‘ÇÉfÉBÉXÉNÇ…èëÇ´èoÇπÇÈÇÊǧDžǵǃǢNjÇ∑ÅBÅiÉÜÅ[ÉUÇÃèÛë‘ÇΔÇÕÅAÉJÉâÉÄÇÃïùÇ‚èáèòǻǫÅAÉRÉìÉgÉçÅ[Éãì‡Ç≈ÉÜÅ[ÉUÇ™ÉJÉXÉ^É}ÉCÉYÇ≈Ç´ÇÈê›íËDžǬǢǃÇÃèÓïÒÇÃDZÇΔÇ≈Ç∑ÅjÅBGetDataBrowserUserState Ç…ÇÊǡǃï‘Ç≥ÇÍÇΩ CFDataRef Ç…ëŒÇµÇƒ CFDataGetLength ÇåƒÇ—èoǪǧÇΔÇΔǵNjǵÇΩÇ™ÅAMac OS X Ç≈ÇÕ "EXC_BAD_ACCESS" Ç≈ÉNÉâÉbÉVÉÖǵǃǵNjǢNjǵÇΩÅBâΩÇ™ä‘à·Ç¡ÇƒÇ¢ÇÈÇÃÇ≈ǵÇÂǧǩÅH

A: écîOǻǙÇÁÅAGetDataBrowserUserState ÇÃÉvÉçÉgÉ^ÉCÉvÇ™ÅiMac OS X 10.2.x Ç®ÇÊǗǪÇÍà»ëOÇ≈ÇÕÅjê≥ǵÇ≠ǻǢÇΩÇflÅA GetDataBrowserUserState ÇÕ CFDataRef Çï‘Ç≥Ç∏ÅACFDictionaryRef Çï‘ǵNjÇ∑ÅB

CFPropertyListyCreateXMLData Çégǡǃ CFDictionaryRef Ç CFDataRef Ç…ïœä∑Ç≈Ç´ÇÈÇÃÇ≈ÅAåãâ Ç…ëŒÇµÇƒ CFDataGetLength ÇåƒÇ—èoÇπÇ‹Ç∑ÅB

à»â∫Ç…ó·Çé¶ÇµÇ‹Ç∑ÅB



ÉäÉXÉg 1.

CFDataRef state = NULL;
OSStatus err;

ControlRef browser = GetDataBrowserFromWindow(window);
err = GetDataBrowserUserState(browser, &state);

// èÛë‘Çà CFType Ç™ñ{ìñÇ… CFDictionaryRef ǩǫǧǩÇämîF
if ((noErr == err) && (CFGetTypeID(state) == CFDictionaryGetTypeID()))
{
  CFDataRef temp = NULL;
  CFIndex index;

if (state != NULL) // ó\ñhë[íuìIÇ» CoreFoundation ÉGÉâÅ[É`ÉFÉbÉN
  {
    temp = CFPropertyListCreateXMLData(NULL, (CFPropertyListRef)state);
if (temp != NULL) // ó\ñhë[íuìIÇ» CoreFoundation ÉGÉâÅ[É`ÉFÉbÉN
    {
index = CFDataGetLength(temp); // ÉoÉCÉgíPà Ç…ÇÊÇÈí∑Ç≥
CFRelease(temp); // çÏê¨ÇµÇΩÇÁÅAâï˙Ç∑ÇÈïKóvǙdžÇÈ
    }
  }
}
// HIToolbox ÇÃãKë•Ç≈ÇÕÅAñºëOÇ… "Copy" Ç© "Create" ÇÃïtÇ≠
// API Ç≈éÊìæÇµÇΩéQèΔÇâï˙Ç∑ÇÈÇ™ÅADataBrowser API ÇÕDZÇÃãKë•ÇÃì±ì¸ëOÇ…çÏê¨Ç≥ÇÍǃǢÇÈÅB
// GetDataBrowserUserState Ç…ÇÊǡǃï‘Ç≥ÇÍÇÈçÄñ⁄ÇÕÅA
// âï˙Ç∑ÇÈïKóvǙdžÇÈ
CFRelease(state);





[2003 îN 7 åé 22 ì˙]